package com.mhuang.module.wechat.controller;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.mhuang.common.utils.ipaddr.IpAddrUtils;
import com.mhuang.module.common.controller.BaseController;
import com.mhuang.module.wechat.service.WechatConfigService;
import com.mhuang.wechat.common.model.ret.Return;
import com.mhuang.wechat.common.utils.MessageUtils;
import com.mhuang.wechat.pay.model.JSApiInfo;
import com.mhuang.wechat.pay.model.PayParameter;
import com.mhuang.wechat.pay.service.BasePayService;

/**
 * 微信支付
 * @author mhuang
 */
@Controller
@RequestMapping("/wechatpay")
public class WechatPayController extends BaseController{

	@Autowired
	private BasePayService  basePayService; 
	
	@Autowired
	private WechatConfigService wechatConfigService;
	
	/**
	 * JS支付
	 */
	@RequestMapping("/pay")
	public  String pay(HttpServletRequest request){
		  //业务参数处理（自己的业务处理代码）
		 
		  //支付系统参数处理
		  PayParameter payInfo=new PayParameter();
		  //获取支付的OPENID、可自行存放、
		  payInfo.setOpenId(request.getSession().getAttribute(OPENID).toString());
		  payInfo.setProductId(request.getParameter("id").toString());
		  payInfo.setTitle("支付标题");
		  payInfo.setTotalFee("支付的金额（分为单位）");
		  //支付需要获取JSTOKEN
		  payInfo.setJsapiTicket(wechatConfigService.getJSToken());
		  payInfo.setJsapiUrl(requestUrl(request));
		  payInfo.setRequestIP(IpAddrUtils.getIpAddr(request));
		  payInfo.setUserAgent(request.getHeader("user-agent"));
		   //支付
		  JSApiInfo jsApiInfo=basePayService.pay(payInfo);
		   //保存支付的订单等数据、因支付完成会通过你配置的进行回调、需要你手动来更改保存数据库或者其他地方
//		  addPayOrder(payInfo, jsApiInfo.getOutTradeNo());

		  //支付页面需要用到的参数
		  request.setAttribute("sign", jsApiInfo.getSignMessage());
		  request.setAttribute("jspayMessage", jsApiInfo.getPayMessage());
		  return  "app/pay";
	}
	
	/**
	 * 根据你在上面支付配置的URL会回调你指定的接口（CALLBACK）URL路径可自行配制。但是必须在你的绑定的oauth2.0域名下
	 * 请注意5秒不返回微信会继续向你推送、请自己做好处理
	 * 返回XML的数据由微信提供、请按照格式进行返回、可使用作者提供的工具类进行处理
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@ResponseBody
    @RequestMapping("/callback")
    public String recomcallback(HttpServletRequest request,HttpServletResponse response) throws Exception{
        Map<String, String> map = parseXml(request);
        //本人采用xstream方式处理
        MessageUtils<Return> utils = new MessageUtils<Return>();
        if (map.get("result_code").equalsIgnoreCase("SUCCESS")) {
        	//支付成功后更改你的订单状态、或者扣费什么的、
//          wechatPayService.save_order(map.get("out_trade_no"),"1");
        	return utils.fromObjectToXml(new Return("SUCCESS", ""), false);
        }
        return utils.fromObjectToXml(new Return("FAIL", ""), false);
    }
}
